package 炫彩元素类

import (
	xc "gitee.com/go_888/xcgui/xcgui/xc"
	xcc "gitee.com/go_888/xcgui/xcgui/xcc"
)

// X结构_Tab条 Tab条.
type X结构_Tab条 struct {
	X结构_基础元素
}

// TAB条_创建, 创建 TabBar 元素.
//
// x: 元素x坐标.
//
// y: 元素y坐标.
//
// cx: 宽度.
//
// cy: 高度.
//
// hParent: 父是窗口资源句柄或UI元素资源句柄. 如果是窗口资源句柄将被添加到窗口, 如果是元素资源句柄将被添加到元素.
func X创建TAB条(元素x坐标, 元素y坐标, 宽度, 高度 int32, 父窗口句柄 int) *X结构_Tab条 {
	p := &X结构_Tab条{}
	p.X设置句柄(xc.TAB条_创建(元素x坐标, 元素y坐标, 宽度, 高度, 父窗口句柄))
	return p
}

// 从句柄创建对象.
func X创建TAB条并按句柄(句柄 int) *X结构_Tab条 {
	p := &X结构_Tab条{}
	p.X设置句柄(句柄)
	return p
}

// 从name创建对象, 失败返回nil.
func X创建TAB条并按名称(名称 string) *X结构_Tab条 {
	handle := xc.X取对象并按名称(名称)
	if handle > 0 {
		p := &X结构_Tab条{}
		p.X设置句柄(handle)
		return p
	}
	return nil
}

// 从UID创建对象, 失败返回nil.
func X创建TAB条并按UID(UID int32) *X结构_Tab条 {
	handle := xc.X取对象并按UID(UID)
	if handle > 0 {
		p := &X结构_Tab条{}
		p.X设置句柄(handle)
		return p
	}
	return nil
}

// 从UID名称创建对象, 失败返回nil.
func X创建TAB条并按UID名称(名称 string) *X结构_Tab条 {
	handle := xc.X取对象并按UID名称(名称)
	if handle > 0 {
		p := &X结构_Tab条{}
		p.X设置句柄(handle)
		return p
	}
	return nil
}

// TAB条_添加标签, 添加一个标签, 返回标签索引.
//
// pName: 标签文本内容.
func (t *X结构_Tab条) X添加标签(文本 string) int32 {
	return xc.TAB条_添加标签(t.X句柄, 文本)
}

// TAB条插入_标签, 插入一个标签, 返回标签索引.
//
// index: 插入位置.
//
// pName: 标签文本内容.
func (t *X结构_Tab条) TAB条插入_标签(插入位置 int32, 文本 string) int32 {
	return xc.TAB条插入_标签(t.X句柄, 插入位置, 文本)
}

// TAB条_移动标签.
//
// iSrc: 源位置索引.
//
// iDest: 目标位置索引.
func (t *X结构_Tab条) X移动标签(源位置索引 int32, 目标位置索引 int32) bool {
	return xc.TAB条_移动标签(t.X句柄, 源位置索引, 目标位置索引)
}

// TAB条_删除标签, 删除一个标签.
//
// index: 位置索引.
func (t *X结构_Tab条) X删除标签(位置索引 int32) bool {
	return xc.TAB条_删除标签(t.X句柄, 位置索引)
}

// TAB条_删除全部, 删除所有标签.
func (t *X结构_Tab条) X删除全部() *X结构_Tab条 {
	xc.TAB条_删除全部(t.X句柄)
	return t
}

// TAB条_取标签, 获取标签按钮句柄.
//
// index: 位置索引.
func (t *X结构_Tab条) X取标签(位置索引 int32) int {
	return xc.TAB条_取标签(t.X句柄, 位置索引)
}

// TAB条_取标签上的关闭按钮, 获取标签上关闭按钮句柄.
//
// index: 位置索引.
func (t *X结构_Tab条) X取标签上的关闭按钮(位置索引 int32) int {
	return xc.TAB条_取标签上的关闭按钮(t.X句柄, 位置索引)
}

// TAB条_取左滚动按钮, 获取左滚动按钮句柄.
func (t *X结构_Tab条) X取左滚动按钮() int {
	return xc.TAB条_取左滚动按钮(t.X句柄)
}

// TAB条_取右滚动按钮, 获取右滚动按钮句柄.
func (t *X结构_Tab条) X取右滚动按钮() int {
	return xc.TAB条_取右滚动按钮(t.X句柄)
}

// TAB条_取下拉菜单按钮句柄.
func (t *X结构_Tab条) X取下拉菜单按钮句柄() int {
	return xc.TAB条_取下拉菜单按钮句柄(t.X句柄)
}

// TAB条_取当前选择, 获取选择的标签索引.
func (t *X结构_Tab条) X取当前选择() int32 {
	return xc.TAB条_取当前选择(t.X句柄)
}

// TAB条_取间隔, 获取标签间距, 0没有间距.
func (t *X结构_Tab条) X取间隔() int32 {
	return xc.TAB条_取间隔(t.X句柄)
}

// TAB条_取标签数量, 获取标签项数量.
func (t *X结构_Tab条) X取标签数量() int32 {
	return xc.TAB条_取标签数量(t.X句柄)
}

// TAB条_取标签位置索引, 获取标签按钮位置索引, 成功返回索引值, 否则返回 xcc.XC_ID_ERROR.
//
// hLabel: 标签按钮句柄.
func (t *X结构_Tab条) X取标签位置索引(标签按钮句柄 int) int32 {
	return xc.TAB条_取标签位置索引(t.X句柄, 标签按钮句柄)
}

// TAB条_置间隔, 设置标签间距, 0没有间距.
//
// spacing: 标签间隔大小.
func (t *X结构_Tab条) X设置间隔(间隔 int32) *X结构_Tab条 {
	xc.TAB条_设置间隔(t.X句柄, 间隔)
	return t
}

// TAB条_置边距, 设置内容与边框的间隔大小.
//
// left: 左边间隔大小.
//
// top: 上边间隔大小.
//
// right: 右边间隔大小.
//
// bottom: 下边间隔大小.
func (t *X结构_Tab条) X设置边距(左, 上, 右, 下 int32) *X结构_Tab条 {
	xc.TAB条_设置边距(t.X句柄, 左, 上, 右, 下)
	return t
}

// TAB条_置选择, 设置选择标签.
//
// index: 标签位置索引.
func (t *X结构_Tab条) X设置选择(索引 int32) *X结构_Tab条 {
	xc.TAB条_设置选择(t.X句柄, 索引)
	return t
}

// TAB条_左滚动, 左按钮滚动.
func (t *X结构_Tab条) X左滚动() *X结构_Tab条 {
	xc.TAB条_左滚动(t.X句柄)
	return t
}

// TAB条_右滚动, 右按钮滚动.
func (t *X结构_Tab条) X右滚动() *X结构_Tab条 {
	xc.TAB条_右滚动(t.X句柄)
	return t
}

// TAB条_启用平铺, 平铺标签, 每个标签显示相同大小.
//
// bTile: 是否启用.
func (t *X结构_Tab条) X启用平铺(是否启用 bool) *X结构_Tab条 {
	xc.TAB条_启用平铺(t.X句柄, 是否启用)
	return t
}

// TAB条_启用下拉菜单按钮.
//
// bEnable:.
func (t *X结构_Tab条) X启用下拉菜单按钮(是否启用 bool) *X结构_Tab条 {
	xc.TAB条_启用下拉菜单按钮(t.X句柄, 是否启用)
	return t
}

// TAB条_启用标签带关闭按钮, 启用关闭标签功能.
//
// bEnable: 是否启用.
func (t *X结构_Tab条) X启用标签带关闭按钮(是否启用 bool) *X结构_Tab条 {
	xc.TAB条_启用标签带关闭按钮(t.X句柄, 是否启用)
	return t
}

// TAB条_置关闭按钮大小, 设置关闭按钮大小.
//
// pSize: 大小值, 宽度和高度可以为-1, -1代表默认值.
func (t *X结构_Tab条) X设置关闭按钮大小(大小值 *xc.X结构_大小) *X结构_Tab条 {
	xc.TAB条_设置关闭按钮大小(t.X句柄, 大小值)
	return t
}

// TAB条_置滚动按钮大小.
//
// pSize: 大小值, 宽度和高度可以为-1, -1代表默认值.
func (t *X结构_Tab条) X设置滚动按钮大小(大小值 *xc.X结构_大小) *X结构_Tab条 {
	xc.TAB条_设置滚动按钮大小(t.X句柄, 大小值)
	return t
}

// TAB条_置指定标签固定宽度.
//
// index: 索引.
//
// nWidth: 宽度, , 如果值为-1, 那么自动计算宽度.
func (t *X结构_Tab条) X设置指定标签固定宽度(索引, 宽度 int32) *X结构_Tab条 {
	xc.TAB条_设置指定标签固定宽度(t.X句柄, 索引, 宽度)
	return t
}

// TAB条_显示标签, 显示或隐藏指定标签.
//
// index: 标签索引.
//
// bShow: 是否显示.
func (t *X结构_Tab条) X显示标签(标签索引 int32, 是否显示 bool) bool {
	return xc.TAB条_显示标签(t.X句柄, 标签索引, 是否显示)
}

// ------------------------- 事件 ------------------------- //

type X事件_Tab条_选择改变 func(iItem int32, pbHandled *bool) int            // TabBar标签按钮选择改变事件. iItem: 标签位置索引.
type X事件_Tab条_选择改变1 func(hEle int, iItem int32, pbHandled *bool) int // TabBar标签按钮选择改变事件. iItem: 标签位置索引.
type X事件_Tab条_删除 func(iItem int32, pbHandled *bool) int            // TabBar标签按钮删除事件. iItem: 标签位置索引.
type X事件_Tab条_删除1 func(hEle int, iItem int32, pbHandled *bool) int // TabBar标签按钮删除事件. iItem: 标签位置索引.

// TabBar标签按钮选择改变事件.
func (t *X结构_Tab条) X事件_选择改变(回调函数 X事件_Tab条_选择改变) bool {
	return xc.X元素_注册事件C(t.X句柄, xcc.X元素事件_Tab条_按钮选择改变, 回调函数)
}

// TabBar标签按钮选择改变事件.
func (t *X结构_Tab条) X事件_选择改变1(回调函数 X事件_Tab条_选择改变1) bool {
	return xc.X元素_注册事件C1(t.X句柄, xcc.X元素事件_Tab条_按钮选择改变, 回调函数)
}

// TabBar标签按钮删除事件.
func (t *X结构_Tab条) X事件_删除(回调函数 X事件_Tab条_删除) bool {
	return xc.X元素_注册事件C(t.X句柄, xcc.X元素事件_Tab条_按钮删除, 回调函数)
}

// TabBar标签按钮删除事件.
func (t *X结构_Tab条) X事件_删除1(回调函数 X事件_Tab条_删除1) bool {
	return xc.X元素_注册事件C1(t.X句柄, xcc.X元素事件_Tab条_按钮删除, 回调函数)
}

// ------------------------- AddEvent ------------------------- //

// AddEvent_TabBar_Select 添加标签按钮选择改变事件.
//   - iItem: 标签位置索引.
//
// pFun: 回调函数.
//
// allowAddingMultiple: 允许添加多个回调函数.
func (t *X结构_Tab条) AddEvent_TabBar_Select(pFun X事件_Tab条_选择改变1, allowAddingMultiple ...bool) int {
	return EventHandler.AddCallBack(t.X句柄, xcc.X元素事件_Tab条_按钮选择改变, onXE_TABBAR_SELECT, pFun, allowAddingMultiple...)
}

// onXE_TABBAR_SELECT 标签按钮选择改变事件.
func onXE_TABBAR_SELECT(hEle int, iItem int32, pbHandled *bool) int {
	cbs := EventHandler.GetCallBacks(hEle, xcc.X元素事件_Tab条_按钮选择改变)
	var ret int
	for i := len(cbs) - 1; i >= 0; i-- {
		if cbs[i] != nil {
			ret = cbs[i].(X事件_Tab条_选择改变1)(hEle, iItem, pbHandled)
			if *pbHandled {
				break
			}
		}
	}
	return ret
}

// AddEvent_TabBar_Delete 添加标签按钮删除事件.
//   - iItem: 标签位置索引.
//
// pFun: 回调函数.
//
// allowAddingMultiple: 允许添加多个回调函数.
func (t *X结构_Tab条) AddEvent_TabBar_Delete(pFun X事件_Tab条_删除1, allowAddingMultiple ...bool) int {
	return EventHandler.AddCallBack(t.X句柄, xcc.X元素事件_Tab条_按钮删除, onXE_TABBAR_DELETE, pFun, allowAddingMultiple...)
}

// onXE_TABBAR_DELETE 标签按钮删除事件.
func onXE_TABBAR_DELETE(hEle int, iItem int32, pbHandled *bool) int {
	cbs := EventHandler.GetCallBacks(hEle, xcc.X元素事件_Tab条_按钮删除)
	var ret int
	for i := len(cbs) - 1; i >= 0; i-- {
		if cbs[i] != nil {
			ret = cbs[i].(X事件_Tab条_删除1)(hEle, iItem, pbHandled)
			if *pbHandled {
				break
			}
		}
	}
	return ret
}
